---
title: Application business rules
summary: Every business rule reachable from LegalMaintenance application workflows and screens.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-26
---

# Application business rules

This page is the complete catalog of business rules that govern this application's behavior. A rule appears here when it is enforced on a code path this application can actually execute — regardless of where the enforcing code lives: the application project itself, a screen code-behind, or a consumed library.

Rules defined in a consumed library but never reached by this application are **out of scope** and are listed only in [Rules not reachable from this application](#rules-not-reachable-from-this-application).

## Rule scope and coverage

Reachability was determined by tracing outward from this application's entry points — screen event handlers, application workflow steps, and application startup/infrastructure code — through the documented delegations in the application, screen, and library analyses available in this repository.

| Category | Section | Count |
| --- | --- | --- |
| Application-level (cross-cutting) | [Application-level business rules](#application-level-business-rules) | 6 |
| Screen-enforced | [Screen business rules](#screen-business-rules) | 6 |
| Library-defined, in scope | [Library business rules in scope](#library-business-rules-in-scope) | 15 |
| **Total in scope** | | **27** |
| Library-defined, not reachable | [Rules not reachable from this application](#rules-not-reachable-from-this-application) | 159 |

## Rule index

| Rule ID | Statement | Origin | Reached from |
| --- | --- | --- | --- |
| [BR-APP-001](#br-app-001-ad-group-gated-view-only-mode-controls-toolbar-edits) | LegalMaintenance applies a shared LNView-based view-only mode across maintenance screens and AJAX-backed manager flows. | Application | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Inline AJAX grid edit via DataHelper.aspx](operations/inline-ajax-grid-edit.md) |
| [BR-APP-002](#br-app-002-claim-confidentiality-is-composed-from-claim-context-and-legal-access-checks) | Attorney assignment composes claim-context confidentiality with legal-manager access checks. | Application | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-APP-003](#br-app-003-assignment-save-fan-out-includes-task-and-calendar-side-effects) | Saving attorney assignments can fan out into task creation and calendar synchronization. | Application | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-APP-004](#br-app-004-environment-classification-governs-real-vs-test-side-effects) | Environment classification governs real versus test side effects. | Application | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md), [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |
| [BR-APP-005](#br-app-005-print-preview-depends-on-a-shared-package-and-metadata-contract) | Print preview depends on a shared package and metadata contract. | Application | [Print preview and document distribution](operations/print-preview-and-document-distribution.md), [Print Preview](../screens/frm-print-preview.md) |
| [BR-APP-006](#br-app-006-startup-always-routes-into-attorney-profile-maintenance) | Startup always routes into attorney profile maintenance. | Application | [Legal Maintenance Start Page](../screens/default.md) |
| [BR-SCR-001](#br-scr-001-attorney-schedule-view-requires-a-specific-attorney-selection) | Attorney schedule view requires a specific attorney selection. | [Attorney Tables](../screens/frm-attorney-assignment.md) | [Attorney Tables](../screens/frm-attorney-assignment.md) |
| [BR-SCR-002](#br-scr-002-attorney-profile-insert-requires-an-unprofiled-attorney) | Attorney profile insert requires an unprofiled attorney. | [Attorney Profile](../screens/frm-attorney-profile.md) | [Attorney Profile](../screens/frm-attorney-profile.md) |
| [BR-SCR-003](#br-scr-003-legal-person-screen-switches-behavior-by-selected-maintenance-view) | Legal Person switches behavior by selected maintenance view. | [Legal Person](../screens/frm-legal-person.md) | [Legal Person](../screens/frm-legal-person.md) |
| [BR-SCR-004](#br-scr-004-other-parties-always-applies-the-selected-firm-type-filter) | Other Parties always applies the selected firm-type filter. | [Other Parties](../screens/frm-other-firms.md) | [Other Parties](../screens/frm-other-firms.md) |
| [BR-SCR-005](#br-scr-005-hearing-location-screen-writes-only-dirty%2C-valid-collections) | Hearing Location writes only dirty, valid collections. | [Hearing Locations](../screens/frm-hearing-location.md) | [Hearing Locations](../screens/frm-hearing-location.md) |
| [BR-SCR-006](#br-scr-006-rotation-print-is-available-only-through-the-rotation-screen-workflow) | Rotation print is available only through the rotation screen workflow. | [Out of Town Rotations](../screens/frm-rotation.md) | [Out of Town Rotations](../screens/frm-rotation.md) |
| [BR-APP-001](#br-app-001-manager-construction-requires-a-security-principal) | An application manager cannot be created without a security principal. | [SAIF.Application](../libraries/saif-application/business-rules.md#br-app-001-manager-construction-requires-a-security-principal) | [Attorney profile maintenance](operations/attorney-profile-maintenance.md) |
| [BR-APP-004](#br-app-004-ad-resource-authorization-is-cached-per-instance) | AD resource authorization is cached per instance. | [SAIF.Application](../libraries/saif-application/business-rules.md#br-app-004-ad-resource-authorization-is-cached-per-instance) | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| [BR-CLM-003](#br-clm-003-fixed-context-change-pipeline-order) | Claim context changes run retrieval, then security, then downstream retrieve logic. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-003-fixed-context-change-pipeline-order) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-CLM-006](#br-clm-006-conflict-claim-denial-with-override) | Worker-conflict claims are denied unless conflict authority or an override exists. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-006-conflict-claim-denial-with-override) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-CLM-012](#br-clm-012-only-conflict-dimension-auto-blocks) | Only the conflict dimension auto-blocks in the base claim manager. | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-012-only-conflict-dimension-auto-blocks) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-001](#br-001-members-of-the-legal-admin-ad-group-bypass-all-confidential-claim-restrictions) | Legal-admin members bypass confidential-claim restrictions. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-001-members-of-the-legal-admin-ad-group-bypass-all-confidential-claim-restrictions) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-002](#br-002-a-worker-conflict-claim) | Worker-conflict claims require legal conflict access, admin access, or override. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-002-a-worker-conflict-claim) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-003](#br-003-an-exposure-claim) | Exposure claims require legal exposure access, admin access, or override. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-003-an-exposure-claim) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-006](#br-006-the-lnview-resource-is-surfaced-as-a-boolean-capability-for-read-only-workflows) | `LNView` is surfaced as the read-only capability for screens. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-006-the-lnview-resource-is-surfaced-as-a-boolean-capability-for-read-only-workflows) | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| [BR-030](#br-030-saving-attorney-tables-persists-six-child-collections-in-a-fixed-order-within-one-write) | Saving attorney tables persists six child collections in a fixed order within one write. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-030-saving-attorney-tables-persists-six-child-collections-in-a-fixed-order-within-one-write) | [Attorney Tables](../screens/frm-attorney-assignment.md), [Inline AJAX grid edit via DataHelper.aspx](operations/inline-ajax-grid-edit.md) |
| [BR-031](#br-031-lookup-code-lists-are-cached-in-process-for-8-hours-sliding) | Lookup code lists are cached in-process for eight hours. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-031-lookup-code-lists-are-cached-in-process-for-8-hours-sliding) | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md) |
| [BR-050](#br-050-new-hearing-locations-default-requiresfulldayflag-false-rotationflag-false-createdate-today-createuser-dpi-userid) | New hearing locations default flags and audit fields. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-050-new-hearing-locations-default-requiresfulldayflag-false-rotationflag-false-createdate-today-createuser-dpi-userid) | [Hearing location maintenance](operations/hearing-location-maintenance.md) |
| [BR-060](#br-060-attorney-profiles-are-active-only-when-expirationdate-has-not-passed) | Attorney profiles are active only while expiration has not passed. | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-060-attorney-profiles-are-active-only-when-expirationdate-has-not-passed) | [Attorney profile maintenance](operations/attorney-profile-maintenance.md) |
| [BR-ASG-001](#br-asg-001-legal-case-evaluation-due-date-is-today-nextworkday-18) | Assignment processing sets legal case evaluation due dates to `Today.NextWorkDay(18)`. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-asg-001-legal-case-evaluation-due-date-is-today-nextworkday-18) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-ASG-002](#br-asg-002-assignment-result-codes-ca-and-cac-trigger) | Assignment result codes `CA` and `CAC` trigger downstream side effects. | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-asg-002-assignment-result-codes-ca-and-cac-trigger) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-CT-03](#br-ct-03-assignee-must-hold-task-update-ad-access) | Generated claim-task assignees must hold task-update access. | [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/business-rules.md#br-ct-03-assignee-must-hold-task-update-ad-access) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-CT-10](#br-ct-10-claim-tasks-default-to-the-manage-claims-category) | Generated claim tasks default to the Manage Claims category. | [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/business-rules.md#br-ct-10-claim-tasks-default-to-the-manage-claims-category) | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| [BR-PRT-008](#br-prt-008-render-and-distribute-preconditions) | Print rendering requires XML content and a report package. | [SAIF.Services.Printing](../libraries/saif-services-printing/business-rules.md#br-prt-008-render-and-distribute-preconditions) | [Print preview and document distribution](operations/print-preview-and-document-distribution.md) |
| [BR-IMG-010](#br-img-010-wire-format-contract-key-set-and-order) | Imaging metadata uses a fixed wire contract. | [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/business-rules.md#br-img-010-wire-format-contract-key-set-and-order) | [Print preview and document distribution](operations/print-preview-and-document-distribution.md) |
| [BR-003](#br-003-only-populated-argument-slots-are-transmitted) | Appworx submissions send only populated argument slots. | [SAIF.Services.Appworx](../libraries/saif-services-appworx/business-rules.md#br-003-only-populated-argument-slots-are-transmitted) | [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |
| [BR-004](#br-004-module%2C-requestor%2C-and-printer-are-always-supplied-with-defaults) | Appworx submissions always send module, requestor, and printer values. | [SAIF.Services.Appworx](../libraries/saif-services-appworx/business-rules.md#br-004-module%2C-requestor%2C-and-printer-are-always-supplied-with-defaults) | [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |

## Application-level business rules

## BR-APP-001 AD-group-gated view-only mode controls toolbar edits

| Field | Value |
| --- | --- |
| **Statement** | LegalMaintenance applies a shared `LNView`-based view-only mode across maintenance screens and AJAX-backed manager flows. |
| **Trigger** | A user opens a maintenance screen or posts a maintenance-grid request backed by a `LegalManagerBase`-derived manager. |
| **Enforcement** | Screen `Page_Load` handlers disable Insert/Save/Delete when `Manager.IsInViewOnly` is true, while the same manager family also backs `DataHelper.aspx` AJAX mutations. |
| **Outcome** | Standard screens demote `LNView` users to read-only toolbar behavior, but the same manager family remains reachable through grid-driven mutation paths. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application](../libraries/saif-application/overview.md), [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Inline AJAX grid edit via DataHelper.aspx](operations/inline-ajax-grid-edit.md), [Attorney Profile](../screens/frm-attorney-profile.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Source** | `docs/application/operations/attorney-profile-maintenance.md`, `docs/application/operations/hearing-location-maintenance.md`, `docs/application/operations/inline-ajax-grid-edit.md`, `docs/screens/frm-attorney-profile.md`, `docs/screens/frm-attorney-assignment.md` |

---

## BR-APP-002 Claim confidentiality is composed from claim context and legal access checks

| Field | Value |
| --- | --- |
| **Statement** | Attorney assignment composes claim-context confidentiality with legal-manager access checks before assignment data is read or written. |
| **Trigger** | A user selects a claim or worker context on the attorney assignment workflow. |
| **Enforcement** | `ClaimAppManager.ChangeContext()` runs claim retrieval and security checks, then `LegalManagerBase.OnRetrieve` applies legal admin/conflict/exposure gating against the same claim context. |
| **Outcome** | Assignment workflows can proceed only through claim contexts that survive both claim-level and legal-level confidentiality evaluation. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim](../libraries/saif-application-claim/overview.md), [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Tables** | `ATTORNEY_WORKER_ASSIGNMENT`, `ATTORNEY_CONFLICT` |
| **Source** | `docs/application/operations/attorney-to-claim-assignment.md`, `docs/application/security-authorization.md` |

---

## BR-APP-003 Assignment save fan-out includes task and calendar side effects

| Field | Value |
| --- | --- |
| **Statement** | Saving attorney assignments can fan out from UI persistence into task creation and calendar synchronization. |
| **Trigger** | A user saves attorney assignment collections from the attorney assignment screen. |
| **Enforcement** | The screen delegates to `Controller.Write`, the application-layer assignment manager runs the assignment process, and downstream business/task libraries raise claim tasks and optionally sync Exchange calendars. |
| **Outcome** | One save can update assignment tables, generate a claim task, and invoke attorney calendar side effects. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md), [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md), [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/overview.md) |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Tables** | `ATTORNEY_WORKER_ASSIGNMENT`, `ATTORNEY_CONFLICT`, `TASK` |
| **Source** | `docs/application/operations/attorney-to-claim-assignment.md`, `docs/screens/frm-attorney-assignment.md` |

---

## BR-APP-004 Environment classification governs real vs test side effects

| Field | Value |
| --- | --- |
| **Statement** | Environment classification determines whether assignment and batch workflows target real or test side effects. |
| **Trigger** | Assignment processing decides whether to run in testing mode, or an Appworx batch request is submitted. |
| **Enforcement** | `AppGlobal.EnvironmentService.GetApplicationEnvironment()` drives the attorney-assignment testing flag and the Appworx target database selection. |
| **Outcome** | Non-production environments should remain on test-safe side effects; a misclassified environment can route to production-affecting integrations.* |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md), [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md), [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |
| **Tables** | `JOB_QUEUE` |
| **Source** | `docs/application/operations/attorney-to-claim-assignment.md`, `docs/application/operations/batch-job-submission-appworx.md`, `docs/application/dependencies.md` |

---

## BR-APP-005 Print preview depends on a shared package and metadata contract

| Field | Value |
| --- | --- |
| **Statement** | Print preview depends on a caller-seeded package/XML contract shared with the printing and imaging libraries. |
| **Trigger** | A maintenance screen invokes print preview. |
| **Enforcement** | `PrintReport(...)` stores package/XML state, `frmPrintPreview.aspx` calls `clsPrint.previewDocument(...)`, and the printing path serializes imaging metadata into the fixed `clsImageImport.ToString()` wire format. |
| **Outcome** | Print preview succeeds only when callers prepare a valid package plus XML/metadata payload that downstream services can interpret. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Services.Printing](../libraries/saif-services-printing/overview.md), [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/overview.md) |
| **Reached from** | [Print preview and document distribution](operations/print-preview-and-document-distribution.md), [Print Preview](../screens/frm-print-preview.md), [Out of Town Rotations](../screens/frm-rotation.md) |
| **Source** | `docs/application/operations/print-preview-and-document-distribution.md`, `docs/screens/frm-print-preview.md`, `docs/screens/frm-rotation.md` |

---

## BR-APP-006 Startup always routes into attorney profile maintenance

| Field | Value |
| --- | --- |
| **Statement** | Application startup always routes users from `Default.aspx` into attorney profile maintenance. |
| **Trigger** | The browser requests the application's default page. |
| **Enforcement** | `Default.aspx` unconditionally calls `Controller.Navigate(ApplicationName, "frmAttorneyProfile.aspx")`. |
| **Outcome** | The only documented startup path enters the attorney profile workflow. |
| **Origin** | Application |
| **Enforcing libraries** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) |
| **Reached from** | [Legal Maintenance Start Page](../screens/default.md) |
| **Source** | `docs/screens/default.md` |

---

## Screen business rules

## BR-SCR-001 Attorney schedule view requires a specific attorney selection

| Field | Value |
| --- | --- |
| **Statement** | The attorney schedule grid cannot be loaded when the filter remains `ALL`. |
| **Trigger** | A user selects `attorney_schedule` in `ddlTableType` and tries to configure the view. |
| **Enforcement** | `ConfigureView()` on `frmAttorneyAssignment.aspx.vb` shows an error and exits when `ddlAttorney.SelectedValue = "ALL"` for the schedule table. |
| **Outcome** | Schedule data is withheld until the user narrows the view to one attorney. |
| **Origin** | [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Reached from** | [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Source** | `docs/screens/frm-attorney-assignment.md` |

---

## BR-SCR-002 Attorney profile insert requires an unprofiled attorney

| Field | Value |
| --- | --- |
| **Statement** | Attorney profile insert is blocked when no unprofiled attorneys remain. |
| **Trigger** | A user clicks Insert on the Attorney Profile screen. |
| **Enforcement** | `Insert()` checks `Manager.NewAttornies.Count` and stops with an error when the count is zero. |
| **Outcome** | Users cannot create duplicate attorney-profile rows for already-profiled attorneys. |
| **Origin** | [Attorney Profile](../screens/frm-attorney-profile.md) |
| **Reached from** | [Attorney Profile](../screens/frm-attorney-profile.md) |
| **Source** | `docs/screens/frm-attorney-profile.md` |

---

## BR-SCR-003 Legal Person screen switches behavior by selected maintenance view

| Field | Value |
| --- | --- |
| **Statement** | Legal Person changes editable grids and expired-row behavior based on the selected maintenance view. |
| **Trigger** | A user changes `ddlPersonType` or toggles `chkExpired`. |
| **Enforcement** | `ActiveGrid`, `FormatWebGridColumns`, and `ddlPersonType_SelectedIndexChanged` switch between `dgPerson` and `dgPersonType`, while `chkExpired_CheckedChanged` controls expired-row inclusion. |
| **Outcome** | The same screen enforces distinct maintenance behavior for legal-person rows versus legal-person-type rows. |
| **Origin** | [Legal Person](../screens/frm-legal-person.md) |
| **Reached from** | [Legal Person](../screens/frm-legal-person.md) |
| **Source** | `docs/screens/frm-legal-person.md` |

---

## BR-SCR-004 Other Parties always applies the selected firm-type filter

| Field | Value |
| --- | --- |
| **Statement** | Other Parties always rebinds data through the currently selected firm-type filter. |
| **Trigger** | The screen loads, the user clicks Retrieve, or the screen refreshes after save. |
| **Enforcement** | `BindData` copies `ddlFirmType` into `Manager.FirmFilter`, and successful save forces a filtered reload. |
| **Outcome** | Users always edit the subset of other-firm rows defined by the current firm-type selection. |
| **Origin** | [Other Parties](../screens/frm-other-firms.md) |
| **Reached from** | [Other Parties](../screens/frm-other-firms.md) |
| **Source** | `docs/screens/frm-other-firms.md` |

---

## BR-SCR-005 Hearing Location screen writes only dirty, valid collections

| Field | Value |
| --- | --- |
| **Statement** | Hearing Locations saves or deletes only when the bound collection is valid, and save also requires dirty rows. |
| **Trigger** | A user clicks Save or Delete on the Hearing Locations screen. |
| **Enforcement** | `Save` checks `Manager.HearingLocationCol.IsDirty` and `IsValid`; `Delete` also gates the operation on collection validity before calling `Manager.DeleteLocation`. |
| **Outcome** | Invalid collections surface messages instead of persisting or deleting hearing-location rows. |
| **Origin** | [Hearing Locations](../screens/frm-hearing-location.md) |
| **Reached from** | [Hearing Locations](../screens/frm-hearing-location.md) |
| **Source** | `docs/screens/frm-hearing-location.md` |

---

## BR-SCR-006 Rotation print is available only through the rotation screen workflow

| Field | Value |
| --- | --- |
| **Statement** | Rotation reporting is emitted only from the rotation screen's Print action. |
| **Trigger** | A user clicks Print on the rotation screen. |
| **Enforcement** | `SAIFMenuTop.PrintButton` runs `Legal_Maint_RotationReport` and navigates to print preview with the prepared report context. |
| **Outcome** | Rotation report output is available only when invoked from the screen's explicit print workflow. |
| **Origin** | [Out of Town Rotations](../screens/frm-rotation.md) |
| **Reached from** | [Out of Town Rotations](../screens/frm-rotation.md) |
| **Source** | `docs/screens/frm-rotation.md` |

---

## Library business rules in scope

## BR-APP-001 Manager construction requires a security principal

| Field | Value |
| --- | --- |
| **Statement** | An application manager cannot be created without a security principal. |
| **Trigger** | LegalMaintenance creates any manager instance for a screen or workflow. |
| **Enforcement** | `AppManagerBase.New(inSecurityPrincipal As clsSecurityPrincipal)` is the only protected constructor path available to derived managers. |
| **Outcome** | Every reachable manager carries request identity for authorization and DB client identity. |
| **Origin** | [SAIF.Application](../libraries/saif-application/business-rules.md#br-app-001-manager-construction-requires-a-security-principal) — `AppManagerBase` |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Source** | `docs/libraries/saif-application/business-rules.md`, `docs/application/operations/attorney-profile-maintenance.md` |

---

## BR-APP-004 AD resource authorization is cached per instance

| Field | Value |
| --- | --- |
| **Statement** | An AD resource authorization decision is evaluated once per `UserAccess` instance and reused thereafter. |
| **Trigger** | A manager checks `LNView`, `LNAdmin`, `LNConflict`, or another resource during one request lifecycle. |
| **Enforcement** | `UserAccess.HasAccess` caches the resource decision before reusing it on later checks. |
| **Outcome** | Repeat authorization checks within one manager instance reuse the same result instead of re-querying AD. |
| **Origin** | [SAIF.Application](../libraries/saif-application/business-rules.md#br-app-004-ad-resource-authorization-is-cached-per-instance) — `UserAccess` |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Attorney Tables](../screens/frm-attorney-assignment.md) |
| **Source** | `docs/libraries/saif-application/business-rules.md`, `docs/application/security-authorization.md` |

---

## BR-CLM-003 Fixed context-change pipeline order

| Field | Value |
| --- | --- |
| **Statement** | Every context change runs claim retrieval, then the security evaluation, then the screen retrieval — in that order. |
| **Trigger** | Attorney assignment sets or changes claim context. |
| **Enforcement** | `ChangeContext()` in `ClaimAppManager` calls `OnContextChanged()` → `OnCheckSecurity()` → `OnRetrieve()`. |
| **Outcome** | Claim security is always evaluated against loaded claim data before legal assignment retrieval logic runs. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-003-fixed-context-change-pipeline-order) — `ClaimAppManager` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-CLM-006 Conflict-claim denial with override

| Field | Value |
| --- | --- |
| **Statement** | A user without conflict-claim authority is denied all access to a worker-conflict claim unless a per-claim security override has been granted to that user. |
| **Trigger** | Attorney assignment evaluates a claim context flagged as worker conflict. |
| **Enforcement** | `ClaimAppManager.OnCheckSecurity()` calls `MarkNoAccess()` when `ClaimSecurity.ConflictAccess` is false and no override exists. |
| **Outcome** | Worker-conflict claims are blocked before attorney-assignment data is exposed unless an explicit override restores access. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-006-conflict-claim-denial-with-override) — `ClaimAppManager` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-CLM-012 Only conflict dimension auto-blocks

| Field | Value |
| --- | --- |
| **Statement** | Of the four claim-confidentiality dimensions, only the conflict dimension blocks access automatically. |
| **Trigger** | Attorney assignment runs the claim security check for a selected claim context. |
| **Enforcement** | `ClaimAppManager.OnCheckSecurity()` tests only `ClaimSecurity.ConflictAccess` for automatic denial. |
| **Outcome** | Exposure, secure-claim, and health-issue results remain advisory until legal-layer consumers enforce them. |
| **Origin** | [SAIF.Application.Claim](../libraries/saif-application-claim/business-rules.md#br-clm-012-only-conflict-dimension-auto-blocks) — `ClaimAppManager` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim/business-rules.md`, `docs/application/security-authorization.md` |

---

## BR-001 Members of the legal admin AD group bypass all confidential-claim restrictions

| Field | Value |
| --- | --- |
| **Statement** | Members of the legal admin AD group bypass all confidential-claim restrictions. |
| **Trigger** | A legal manager retrieves assignment data for a claim-context workflow. |
| **Enforcement** | `LegalManagerBase.OnRetrieve` grants access when `IsInAdminGroup` is true. |
| **Outcome** | Legal-admin users bypass downstream conflict and exposure claim restrictions during legal retrieval. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-001-members-of-the-legal-admin-ad-group-bypass-all-confidential-claim-restrictions) — `LegalManagerBase` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-002 A worker-conflict claim

| Field | Value |
| --- | --- |
| **Statement** | A worker-conflict claim may be viewed only with legal conflict access (or admin, or a security override). |
| **Trigger** | A selected attorney-assignment claim context is marked as worker conflict. |
| **Enforcement** | `LegalManagerBase.OnRetrieve` checks `ClaimData.IsWorkerConflict` and blocks access when legal conflict access is absent and no bypass applies. |
| **Outcome** | Confidential worker-conflict claims are hidden from non-entitled legal users in the assignment flow. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-002-a-worker-conflict-claim) — `LegalManagerBase` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-003 An exposure claim

| Field | Value |
| --- | --- |
| **Statement** | An exposure claim may be viewed only with legal exposure access (or admin, or a security override). |
| **Trigger** | A selected attorney-assignment claim context is marked as exposure. |
| **Enforcement** | `LegalManagerBase.OnRetrieve` checks `ClaimData.IsExposure` and blocks access when legal exposure access is absent and no bypass applies. |
| **Outcome** | Exposure claims are withheld from non-entitled legal users during the assignment workflow. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-003-an-exposure-claim) — `LegalManagerBase` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-006 The LNView resource is surfaced as a Boolean capability for read-only workflows

| Field | Value |
| --- | --- |
| **Statement** | The `LNView` resource is surfaced as a Boolean capability for read-only workflows. |
| **Trigger** | A LegalMaintenance screen decides whether to suppress write actions. |
| **Enforcement** | `LegalManagerBase.IsInViewOnly` exposes the `LNView` authorization result to screen code. |
| **Outcome** | Maintenance screens can disable toolbar editing actions for read-only users. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-006-the-lnview-resource-is-surfaced-as-a-boolean-capability-for-read-only-workflows) — `LegalManagerBase` |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Attorney Tables](../screens/frm-attorney-assignment.md), [Other Parties](../screens/frm-other-firms.md) |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/security-authorization.md`, `docs/screens/frm-other-firms.md` |

---

## BR-030 Saving attorney tables persists six child collections in a fixed order within one write

| Field | Value |
| --- | --- |
| **Statement** | Saving attorney tables persists six child collections in a fixed order within one write. |
| **Trigger** | A user saves attorney-table edits or an AJAX table mutation reaches the manager. |
| **Enforcement** | `clsAttorneyTableManager.OnWrite` saves the attorney table child collections in a fixed sequence inside one write operation. |
| **Outcome** | Attorney conflict, policy, worker, schedule, and related table changes are persisted together in one ordered manager write.* |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-030-saving-attorney-tables-persists-six-child-collections-in-a-fixed-order-within-one-write) — `clsAttorneyTableManager` |
| **Reached from** | [Attorney Tables](../screens/frm-attorney-assignment.md), [Inline AJAX grid edit via DataHelper.aspx](operations/inline-ajax-grid-edit.md) |
| **Tables** | `ATTORNEY_WORKER_ASSIGNMENT`, `ATTORNEY_CONFLICT`, `ATTORNEY_POLICY_ASSIGNMENT`, `ATTORNEY_SCHEDULE` |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/inline-ajax-grid-edit.md`, `docs/screens/frm-attorney-assignment.md` |

---

## BR-031 Lookup code lists are cached in-process for 8 hours sliding

| Field | Value |
| --- | --- |
| **Statement** | Lookup code lists are cached in-process for 8 hours (sliding) at low priority. |
| **Trigger** | Attorney-table, hearing-location, or profile screens first request shared lookup lists. |
| **Enforcement** | `AddToCache` helpers in `clsAttorneyTableManager` and `clsHearingLocationManager` populate shared lookup data into process cache. |
| **Outcome** | Repeated screen loads reuse cached code lists instead of requerying the database for each request. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-031-lookup-code-lists-are-cached-in-process-for-8-hours-sliding) — `clsAttorneyTableManager`, `clsHearingLocationManager` |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Hearing location maintenance](operations/hearing-location-maintenance.md), [Out of Town Rotations](../screens/frm-rotation.md) |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/hearing-location-maintenance.md` |

---

## BR-050 New hearing locations default RequiresFullDayFlag False RotationFlag False CreateDate Today CreateUser DPI UserID

| Field | Value |
| --- | --- |
| **Statement** | New hearing locations default to `RequiresFullDayFlag = False` and `RotationFlag = False`, with `CreateDate = Today` and `CreateUser = DPI.UserID`. |
| **Trigger** | A user inserts a new hearing location row. |
| **Enforcement** | `clsHearingLocationManager.InsertNewLocation` seeds the new row before it is edited on the screen. |
| **Outcome** | New hearing-location records start with stable default flags and audit fields. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-050-new-hearing-locations-default-requiresfulldayflag-false-rotationflag-false-createdate-today-createuser-dpi-userid) — `clsHearingLocationManager` |
| **Reached from** | [Hearing location maintenance](operations/hearing-location-maintenance.md), [Hearing Locations](../screens/frm-hearing-location.md) |
| **Tables** | `HEARING_LOCATION` |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/application/operations/hearing-location-maintenance.md`, `docs/screens/frm-hearing-location.md` |

---

## BR-060 Attorney profiles are active only when ExpirationDate has not passed

| Field | Value |
| --- | --- |
| **Statement** | An attorney profile is "active" only when its `ExpirationDate` has not passed. |
| **Trigger** | The attorney profile screen loads or refreshes active-only profile data. |
| **Enforcement** | `clsMaintenanceManager.GetProfiles` returns active profiles separately from all profiles based on expiration status. |
| **Outcome** | The default attorney-profile view excludes expired attorney profiles until the user asks to include them. |
| **Origin** | [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/business-rules.md#br-060-attorney-profiles-are-active-only-when-expirationdate-has-not-passed) — `clsMaintenanceManager` |
| **Reached from** | [Attorney profile maintenance](operations/attorney-profile-maintenance.md), [Attorney Profile](../screens/frm-attorney-profile.md) |
| **Tables** | `ATTORNEY_PROFILE` |
| **Source** | `docs/libraries/saif-application-claim-legal/business-rules.md`, `docs/screens/frm-attorney-profile.md` |

---

## BR-ASG-001 Legal case evaluation due date is Today NextWorkDay 18

| Field | Value |
| --- | --- |
| **Statement** | Legal case evaluation due date is `Today.NextWorkDay(18)`. |
| **Trigger** | The attorney assignment batch process creates or updates assignment side effects for an eligible case. |
| **Enforcement** | The attorney-assignment business process in `SAIF.Business.Claim.Legal` computes the legal case evaluation due date using the next-workday offset. |
| **Outcome** | Assignment-driven legal evaluation follow-up dates land eighteen working days after the triggering event. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-asg-001-legal-case-evaluation-due-date-is-today-nextworkday-18) — `assignment process` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-business-claim-legal/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-ASG-002 Assignment result codes CA and CAC trigger

| Field | Value |
| --- | --- |
| **Statement** | Assignment result codes `CA` and `CAC` trigger downstream assignment processing side effects. |
| **Trigger** | The attorney assignment business flow processes an assignment result whose code is `CA` or `CAC`. |
| **Enforcement** | The assignment batch logic branches on these result codes to drive follow-on work. |
| **Outcome** | Only qualifying assignment outcomes trigger the documented assignment follow-up actions. |
| **Origin** | [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/business-rules.md#br-asg-002-assignment-result-codes-ca-and-cac-trigger) — `assignment process` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Source** | `docs/libraries/saif-business-claim-legal/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-CT-03 Assignee must hold task-update AD access

| Field | Value |
| --- | --- |
| **Statement** | The assignee mailid must hold AD resource `CTTaskUpdate`, or else external resource `RTWExternalUpdate`. |
| **Trigger** | The assignment workflow generates a claim task and sets its assignee mailid. |
| **Enforcement** | `clsClaimTask.ValidMailId` validates assignee access during task creation/save. |
| **Outcome** | Generated claim tasks are blocked when the chosen assignee lacks the required task-update authorization. |
| **Origin** | [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/business-rules.md#br-ct-03-assignee-must-hold-task-update-ad-access) — `clsClaimTask` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Tables** | `TASK` |
| **Source** | `docs/libraries/saif-business-tasks-claim/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-CT-10 Claim tasks default to the Manage Claims category

| Field | Value |
| --- | --- |
| **Statement** | Claim tasks are always created under the Manage Claims category (`CLMM`) unless the caller requests Fast Track (`FSTRK`). |
| **Trigger** | The attorney assignment workflow creates a downstream claim task. |
| **Enforcement** | `clsClaimTask.NewTask` and `clsClaimTaskGenerator.NewTask` seed the category during task creation. |
| **Outcome** | Assignment-generated tasks enter the claims task domain under the standard Manage Claims category unless explicitly overridden. |
| **Origin** | [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/business-rules.md#br-ct-10-claim-tasks-default-to-the-manage-claims-category) — `clsClaimTask`, `clsClaimTaskGenerator` |
| **Reached from** | [Attorney-to-claim assignment](operations/attorney-to-claim-assignment.md) |
| **Tables** | `TASK` |
| **Source** | `docs/libraries/saif-business-tasks-claim/business-rules.md`, `docs/application/operations/attorney-to-claim-assignment.md` |

---

## BR-PRT-008 Render and distribute preconditions

| Field | Value |
| --- | --- |
| **Statement** | A report can be rendered or distributed only when its XML document exists and a report package is assigned. |
| **Trigger** | The print preview screen attempts to render a document. |
| **Enforcement** | `ReportBase.Render` and `ReportBase.Distribute` short-circuit unless both package and XML prerequisites are present. |
| **Outcome** | Print preview does not call downstream print services with incomplete report payloads. |
| **Origin** | [SAIF.Services.Printing](../libraries/saif-services-printing/business-rules.md#br-prt-008-render-and-distribute-preconditions) — `ReportBase` |
| **Reached from** | [Print preview and document distribution](operations/print-preview-and-document-distribution.md), [Print Preview](../screens/frm-print-preview.md) |
| **Source** | `docs/libraries/saif-services-printing/business-rules.md`, `docs/screens/frm-print-preview.md` |

---

## BR-IMG-010 Wire format contract key set and order

| Field | Value |
| --- | --- |
| **Statement** | The emitted key set, key spelling, and key order form the imaging/xPression wire contract; every key in the fixed list is always present even when its value is blank. |
| **Trigger** | Print/document distribution serializes imaging metadata through `clsImageImport.ToString()`. |
| **Enforcement** | `clsImageImport.ToString()` emits the stable newline-delimited metadata block consumed by downstream print/imaging components. |
| **Outcome** | Print consumers can rely on a fixed metadata shape and field order across document-distribution requests. |
| **Origin** | [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/business-rules.md#br-img-010-wire-format-contract-key-set-and-order) — `clsImageImport` |
| **Reached from** | [Print preview and document distribution](operations/print-preview-and-document-distribution.md) |
| **Source** | `docs/libraries/saif-services-imaging-import/business-rules.md`, `docs/application/operations/print-preview-and-document-distribution.md` |

---

## BR-003 Only populated argument slots are transmitted

| Field | Value |
| --- | --- |
| **Statement** | Only argument slots that hold a value are transmitted to the scheduler; unsupplied arguments must not be sent as parameters. |
| **Trigger** | LegalMaintenance constructs and submits an Appworx batch request. |
| **Enforcement** | `clsRequestAppworxJob` only copies non-empty `ArgN` values into the stored-procedure request. |
| **Outcome** | Appworx receives sparse parameter lists that reflect only the arguments the batch workflow actually populated. |
| **Origin** | [SAIF.Services.Appworx](../libraries/saif-services-appworx/business-rules.md#br-003-only-populated-argument-slots-are-transmitted) — `clsRequestAppworxJob` |
| **Reached from** | [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |
| **Tables** | `JOB_QUEUE` |
| **SQL** | [SQL-001](../libraries/saif-services-appworx/sql/SQL-001-submit-appworx-job.md) |
| **Source** | `docs/libraries/saif-services-appworx/business-rules.md`, `docs/application/operations/batch-job-submission-appworx.md` |

---

## BR-004 Module requestor and printer are always supplied with defaults

| Field | Value |
| --- | --- |
| **Statement** | Module, requestor, and printer are always supplied on every submission; requestor defaults to `Appworx` and printer defaults to `SYSOUT` when the caller does not specify them. |
| **Trigger** | LegalMaintenance submits an Appworx job request. |
| **Enforcement** | `clsRequestAppworxJob` seeds defaults and unconditionally supplies the fixed procedure parameters. |
| **Outcome** | Batch submissions always include the Appworx contract's required top-level identifiers, even when the caller omits optional values.* |
| **Origin** | [SAIF.Services.Appworx](../libraries/saif-services-appworx/business-rules.md#br-004-module%2C-requestor%2C-and-printer-are-always-supplied-with-defaults) — `clsRequestAppworxJob` |
| **Reached from** | [Batch job submission (Appworx)](operations/batch-job-submission-appworx.md) |
| **Tables** | `JOB_QUEUE` |
| **SQL** | [SQL-001](../libraries/saif-services-appworx/sql/SQL-001-submit-appworx-job.md) |
| **Source** | `docs/libraries/saif-services-appworx/business-rules.md`, `docs/application/operations/batch-job-submission-appworx.md` |

---

## Rules not reachable from this application

Rules documented in a consumed library that no application execution path reaches.

| Library | Rule ID | Statement | Reason not reachable |
| --- | --- | --- | --- |
| [SAIF.Application](../libraries/saif-application/overview.md) | [BR-APP-002](../libraries/saif-application/business-rules.md#br-app-002-access-is-denied-by-default) | Access is denied by default; a manager is restricted until a security evaluation explicitly grants view or update rights. | Reachability analysis for LegalMaintenance centers on documented workflow- and screen-level effects; this base-state contract is not named as a distinct executed rule.** |
| [SAIF.Application.Claim.Legal](../libraries/saif-application-claim-legal/overview.md) | [BR-005](../libraries/saif-application-claim-legal/business-rules.md#br-005-the-lncaseupdate-resource-is-surfaced-as-a-boolean-capability-for-update-workflows) | The LNCaseUpdate resource is surfaced as a Boolean capability for update workflows. | `LNCaseUpdate` is documented as unused in LegalMaintenance and relevant to sibling LegalNet workflows only. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-LC-001](../libraries/saif-business-claim-legal/business-rules.md#br-lc-001-case-type-is-required) | Case type is required. | `BR-LC-*` case-entry rules belong to LegalNet case maintenance, not LegalMaintenance screens. |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-SC-001](../libraries/saif-business-claim-legal/business-rules.md#br-sc-001-schedule-type-and-status-are-required) | Schedule type and status are required. | These schedule rules govern LegalNet legal-case schedules, not the attorney maintenance grids documented for LegalMaintenance.** |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-AT-001](../libraries/saif-business-claim-legal/business-rules.md#br-at-001-attorney%2C-attorney-type-and-effective-date-are-required) | Attorney, attorney type and effective date are required. | Screen docs show collection-validity gates but do not identify this exact underlying validation rule on a named execution path.** |
| [SAIF.Business.Claim.Legal](../libraries/saif-business-claim-legal/overview.md) | [BR-HL-001](../libraries/saif-business-claim-legal/business-rules.md#br-hl-001-hearing-location-code-and-name-are-required) | Hearing location code and name are required. | The screen analysis does not name the underlying hearing-location business-object validation rule explicitly.** |
| [SAIF.Business.Tasks](../libraries/saif-business-tasks/overview.md) | [BR-001](../libraries/saif-business-tasks/business-rules.md#br-001-a-task-must-have-a-task-category-code) | A task must have a Task Category Code. | Attorney-assignment docs reach claim-task rules in `SAIF.Business.Tasks.Claim`; they do not trace base-task rules separately. |
| [SAIF.Business.Tasks.Claim](../libraries/saif-business-tasks-claim/overview.md) | [BR-CT-01](../libraries/saif-business-tasks-claim/business-rules.md#br-ct-01-claim-task-must-reference-a-resolvable-claim) | A claim task must reference a resolvable claim. | The assignment documentation does not identify this lower-level rule explicitly on a reachable path.** |
| [SAIF.Business.View.Policy](../libraries/saif-business-view-policy/overview.md) | [BR-VP-010](../libraries/saif-business-view-policy/business-rules.md#br-vp-010-demo-users-see-masked-data) | Demo users see masked policy, address, agency and team member data. | The old application page mentioned masking, but no current screen or operation analysis proves an executed policy-view path.** |
| [SAIF.Business.View.Provider](../libraries/saif-business-view-provider/overview.md) | [BR-PRV-001](../libraries/saif-business-view-provider/business-rules.md#br-prv-001-primary-tax-id-must-be-a-9-digit-number) | Primary tax ID must be a 9-digit number. | Provider-view retrieval is not documented on any LegalMaintenance execution path. |
| [SAIF.Business.Utilities](../libraries/saif-business-utilities/overview.md) | [BR-001](../libraries/saif-business-utilities/business-rules.md#br-001-null-or-whitespace-string) | A `Nothing` or whitespace-only string is returned unchanged by title casing. | No analyzed LegalMaintenance workflow or screen references this utility behavior on an executed path. |
| [SAIF.Services.Printing](../libraries/saif-services-printing/overview.md) | [BR-PRT-003](../libraries/saif-services-printing/business-rules.md#br-prt-003-synchronous-versus-queued-distribution) | Distribution is queued through MSMQ when asynchronous and sent directly otherwise. | The app print workflow documents preview rendering, not queued distribution execution from LegalMaintenance.** |
| [SAIF.Services.Imaging.Import](../libraries/saif-services-imaging-import/overview.md) | [BR-IMG-001](../libraries/saif-services-imaging-import/business-rules.md#br-img-001-date-field-emission) | Date index fields are emitted only when inside valid date bounds. | Application docs name only the overall wire-format contract, not specific field-emission rules. |
| [SAIF.Services.Appworx](../libraries/saif-services-appworx/overview.md) | [BR-001](../libraries/saif-services-appworx/business-rules.md#br-001-environment-based-portal-routing-to-pradt) | When the override flag is set, Appworx submissions route to PRADT on `WCISPROD` or `WCISDEV1`. | The documented LegalMaintenance caller omits the override flag, so this routing override path is not executed. |

## Notes

- Application-level rules retain the existing `BR-APP-001` through `BR-APP-006` identifiers so existing cross-document references continue to resolve.
- Library rules remain in their owning libraries' canonical ID schemes and are restated here only when a LegalMaintenance workflow or screen analysis names a concrete reachable path.
- No inherited `INH-NNN` rules are included because the repository artifacts reviewed for this run did not provide documented Legends-derived inherited-rule evidence for this application page.

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Related documentation
- [Application index](index.md)
- [Overview](overview.md)
- [Architecture](architecture.md)
- [Dependencies](dependencies.md)
- [Configuration](configuration.md)
- [Operations and processes](operations-processes.md)
- [Security and authorization](security-authorization.md)
- [Data model](data-model.md)
- [Tech debt](tech-debt.md)

## Sources
- `.saifdocgen/templates/application/app-business-rules.md`
- `.saifdocgen/skills/technical-writing-standards/SKILL.md`
- `.saifdocgen/state/analysis-manifest.json`
- `.saifdocgen/state/decision-log.md`
- `docs/application/architecture.md`
- `docs/application/data-model.md`
- `docs/application/dependencies.md`
- `docs/application/operations-processes.md`
- `docs/application/operations/attorney-profile-maintenance.md`
- `docs/application/operations/attorney-to-claim-assignment.md`
- `docs/application/operations/batch-job-submission-appworx.md`
- `docs/application/operations/hearing-location-maintenance.md`
- `docs/application/operations/inline-ajax-grid-edit.md`
- `docs/application/operations/print-preview-and-document-distribution.md`
- `docs/application/security-authorization.md`
- `docs/application/tech-debt.md`
- `docs/libraries/saif-application/business-rules.md`
- `docs/libraries/saif-application-claim/business-rules.md`
- `docs/libraries/saif-application-claim-legal/business-rules.md`
- `docs/libraries/saif-business-claim/business-rules.md`
- `docs/libraries/saif-business-claim-legal/business-rules.md`
- `docs/libraries/saif-business-policy/business-rules.md`
- `docs/libraries/saif-business-tasks/business-rules.md`
- `docs/libraries/saif-business-tasks-claim/business-rules.md`
- `docs/libraries/saif-business-utilities/business-rules.md`
- `docs/libraries/saif-business-view-policy/business-rules.md`
- `docs/libraries/saif-business-view-provider/business-rules.md`
- `docs/libraries/saif-services-appworx/business-rules.md`
- `docs/libraries/saif-services-imaging-import/business-rules.md`
- `docs/libraries/saif-services-printing/business-rules.md`
- `docs/screens/default.md`
- `docs/screens/frm-attorney-assignment.md`
- `docs/screens/frm-attorney-profile.md`
- `docs/screens/frm-hearing-location.md`
- `docs/screens/frm-legal-person.md`
- `docs/screens/frm-other-firms.md`
- `docs/screens/frm-print-preview.md`
- `docs/screens/frm-rotation.md`
